A network storage controller is a processing system that is used to store and retrieve data on behalf of one or more hosts on a network. A storage server is a type of storage controller that operates on behalf of one or more clients on a network, to store and manage data in a set of mass storage devices, such as magnetic or optical storage-based disks or tapes. Some storage servers are designed to service file-level requests from hosts, as is commonly the case with file servers used in a network attached storage (NAS) environment. Other storage servers are designed to service block-level requests from hosts, as with storage servers used in a storage area network (SAN) environment. Still other storage servers are capable of servicing both file-level requests and block-level requests, as is the case with certain storage servers made by NetApp®, Inc. of Sunnyvale, Calif.
In at least one implementation, a storage server or server cluster makes data available to a client (host) system by presenting or exporting one or more volumes, or one or more logical containers of data referred to herein as quota trees (“qtrees”), to the client systems. A “volume” is a logical data set which is an abstraction of physical storage, combining one or more physical mass storage devices (e.g., disks) or parts thereof into a single logical storage object, and which is managed as a single administrative unit, such as a single file system. A “file system” is a structured (e.g., hierarchical) set of stored logical containers of data (e.g., volumes, LUNs, directories, files), which does not have to include or have its storage based on “files” per se.
From the perspective of a client system, each volume can appear to be a single disk drive. However, each volume can represent the storage space in a single physical storage device, a redundant array of independent disks (RAID) or a RAID group, an aggregate of some or all of the storage space in multiple physical storage devices, or any other suitable set of storage space. An “aggregate” is a logical aggregation of physical storage; i.e., a logical container for a pool of storage, combining one or more physical mass storage devices (e.g., disks) or parts thereof into a single logical storage object, which contains or provides storage for one or more other logical data sets at a higher level of abstraction (e.g., volumes).
A “qtree” is a quota structure, which is a logical container of data that has a mechanism for controlling consumption of storage space. In certain storage servers a qtree is implemented as a top-level directory within a volume, where such directory has special properties (e.g., quota rules) for managing its storage space and/or file consumption for one or more specific users or user groups, for example.
While qtrees are a useful mechanism for limiting storage device usage and file usage, they can present problems with regard to certain types of storage system operations, such as certain operations for mirroring, copying or moving a volume. For example, it may be desirable to have the capability to copy or move a volume from one file system to another, or from one aggregate to another. Further, it may be desirable to accomplish the operation by using logical replication of user data, as opposed to using physical replication at the block level within the file system. Logical replication is replication in which the replicated data set has the identical logical structure as the original data set but does not necessarily have the same physical structure (i.e., at the block level of a file system) as the original data set (a “block” in this context is the smallest addressable unit of contiguous data used by a given file system to manipulate and transfer data, which is commonly though not necessarily 4 kbytes in size). It may be desirable to use logical replication instead of a physical block level replication, because that way a volume or other type of data set can be copied or moved notwithstanding differences in the file system formats and structures at the source and the destinations.
However, logical replication presents a problem when the volume being moved (or copied) includes one or more qtrees on which quotas are being enforced. In order to have reliable control of file or block usage in a qtree, an up-to-date accounting of file usage and block usage by the qtree needs to be maintained. Such an accounting is generated by scanning a volume that contains a qtree to determine its file and block usage, and the element which performs this scanning function in the storage server is called a quota scanner. However, if the file system or aggregate used at the destination is of a different type or format than the file system at the source, the quota accounting generated at the source may not be valid for the destination. For example, the source aggregate may be a 32-bit aggregate while the destination aggregate is a 64-bit aggregate, or vice versa. As another example, the source file system may be a FlexVol® type file system while the destination file system is a striped file system (FlexVol is a trademark of NetApp, Inc.).
One way to handle this problem would be to rescan the volume that contains the qtree after the volume move operation is complete, to generate a new quota accounting at the destination. However, it can take a long time to complete such a scan—potentially hours or days, depending on the size of the volume—during which the qtree's usage control functionality is not available. Consequently, the volume move operation can cause a significant and prolonged service disruption to administrative users who want to limit the qtree's block/file usage. That is, while the data is immediately available to the client users, the file system consumption is not being controlled immediately after the move. This situation is particularly undesirable when a volume move is desired to be “transparent”, i.e., where a user does not perceive any interruption in access to the volume and is not required to unmount the volume at the source and remount it at the destination.